package com.qixiaobao.nondirect.settle.service;

import com.qixiaobao.nondirect.settle.domain.InsureFeeReceipt;
import com.qixiaobao.nondirect.settle.domain.InsureFee;
import com.qixiaobao.nondirect.settle.domain.dto.InsureFeeDTO;
import com.qixiaobao.nondirect.settle.domain.vo.InsureFeeChargeVO;
import com.qixiaobao.system.domain.dto.ChargeDTO;
import com.qixiaobao.system.domain.dto.CountDTO;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @Description 保费结算  业务层
 * @Author yangxm
 * @Date 2025/6/27 16:13
 */
public interface IInsureFeeService {

    /**
     * @Description 待支付、已结算列表
     * @Author yangxm
     * @Date 2025/6/27 16:51
     * @param insureFeeDTO
     * @return java.util.List<com.qixiaobao.nondirect.domain.InsureFee>
     */
    List<InsureFee> selectInsureFeeList(InsureFeeDTO insureFeeDTO);

    /**
     * @Description 待支付、已结算 - 结算人数和费用总计统计
     * @Author yangxm
     * @Date 2025/6/27 16:51
     * @param insureFeeDTO
     * @return com.qixiaobao.nondirect.invoice.domain.domain.dto.CountDto
     */
    CountDTO selectInsureFeeTotal(InsureFeeDTO insureFeeDTO);

    /**
     * @Description 待支付、已结算 - 导出
     * @Author yangxm
     * @Date 2025/6/27 16:51
     * @param insureFeeDTO
     * @param response
     * @return void
     */
    void insureFeeExport(InsureFeeDTO insureFeeDTO, HttpServletResponse response);

    /**
     * @Description 待支付、已结算 - 费用详情列表
     * @Author yangxm
     * @Date 2025/6/27 16:51
     * @param chargeDTO
     * @return java.util.List<com.qixiaobao.nondirect.invoice.domain.domain.Charge>
     */
    List<InsureFeeChargeVO> selectInsureFeeChargeList(ChargeDTO chargeDTO);

    /**
     * @Description 修改保费归属期
     * @Author yangxm
     * @Date 2025/7/1 9:41
     * @param insureFeeDTO
     * @return int
     */
    int updateInsureFeeMonth(InsureFeeDTO insureFeeDTO);

    /**
     * @Description 修改备注
     * @Author yangxm
     * @Date 2025/7/1 9:41
     * @param insureFeeDTO
     * @return int
     */
    int updateRemark(InsureFeeDTO insureFeeDTO);

    /**
     * @Description 下载回单凭证
     * @Author yangxm
     * @Date 2025/7/1 13:10
     * @param insureFeeDTO
     */
    void downloadReceipt(InsureFeeDTO insureFeeDTO);

    /**
     * @Description 根据保费id，查询回单凭证列表
     * @Author yangxm
     * @Date 2025/7/1 13:50
     * @param insureFeeId
     * @return java.util.List<InsureFeeReceipt>
     */
    List<InsureFeeReceipt> selectInsureFeeReceiptListByInsureFeeId(Long insureFeeId);

    /**
     * @Description 修改预回票时间
     * @Author yangxm
     * @Date 2025/7/1 13:50
     * @param insureFeeDTO
     * @return int
     */
    int updateInvoiceReturnDate(InsureFeeDTO insureFeeDTO);

    /**
     * @Description 根据保费id，查询回单凭证(主子表结构)
     * @Author yangxm
     * @Date 2025/7/1 13:50
     * @param insureFeeId
     * @return com.qixiaobao.nondirect.domain.InsureFee
     */
    InsureFee selectInsureFeeReceiptById(Long insureFeeId);
}
